package com.hzw.saas.api.rbac;

import java.util.List;

import com.hzw.saas.api.rbac.bo.PermissionTreeBO;
import com.hzw.saas.api.rbac.bo.RoleBO;

/**
 * @author zzl
 * @since 08/30/2021
 */
public interface IUserRoleService {

    /**
     * 根据角色删除关联关系
     *
     * @param roleId 角色ID
     * @return true or false
     */
    boolean deleteRole(String roleId);

    /**
     * 批量根据角色删除关联关系
     *
     * @param roleIds 角色ID
     * @return true or false
     */
    boolean deleteRoles(List<String> roleIds);

    /**
     * 根据用户删除角色关联
     *
     * @param system 角色所属系统，null为全部
     * @param userId 用户ID
     * @return
     */
    boolean deleteUser(Integer system, String userId);

    /**
     * 更新用户角色
     *
     * @param userId  用户ID
     * @param roleIds 角色ID列表
     */
    boolean updateUserRole(Integer sys, String userId, List<String> roleIds);

    /**
     * 获取用户角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<RoleBO> listRoles(Integer sys, String userId);

    /**
     * 获取用户角色ID列表
     *
     * @param userId 用户ID
     * @return 角色ID列表
     */
    List<String> listRoleIds(Integer sys, String userId);

    /**
     * 获取用户权限信息列表
     *
     * @param userId 用户ID
     * @param supId  权限上级ID
     * @param level  树层级
     * @param types  权限类型
     * @return 权限信息列表
     */
    List<PermissionTreeBO> listPermTrees(Integer sys, String userId, String supId, Integer level, Integer... types);

    /**
     * 获取用户权限信息ID列表
     *
     * @param userId 用户ID
     * @return 权限信息ID列表
     */
    List<String> listPermissionIds(Integer sys, String userId);

    /**
     * 获取用户授权列表
     *
     * @param userId 用户ID
     * @return 授权列表
     */
    List<String> listAuthorities(Integer sys, String userId);

}
